home *** CD-ROM | disk | FTP | other *** search
/ USA Bestseller / USA BESTSELLER Vol 1-95 (Hepp-Computer)(1995).iso / e190 / vbench.cpp < prev    next >
C/C++ Source or Header  |  1995-02-20  |  5KB  |  176 lines

  1. #include "htimer.h"   // HTimer class
  2. #include <iostream.h> // cout streams class
  3. #include <conio.h>    // getch()
  4.  
  5. #include "vbench.h"   // BenchData structures,bench functions
  6.  
  7. //  VIDEO.ASM external function prototypes:
  8. extern "C" {
  9.     void set_gmode(int); // set graphics mode
  10.     void set_tweaked();  // set 'tweaked' mode
  11.     void fillbuf();      // fill ram_buffer with random colors-non-planar
  12.     void fillbuft();     // fill ram_buffer with random colors-planar form
  13. }
  14.  
  15. //  Global timer class
  16. HTimer timer1;
  17.  
  18. //  BenchData array counts
  19. const int shared_total = sizeof(shared_benches)/sizeof(SharedBenchData);
  20. const int m13_total    = sizeof(m13_benches)/sizeof(BenchData);
  21. const int tw_total     = sizeof(tw_benches)/sizeof(BenchData);
  22.  
  23. //  BenchData timing results array
  24. dword shared_results[shared_total][2];
  25. dword m13_results[m13_total];
  26. dword tw_results[tw_total];
  27.  
  28. //------------------------------------------------------------------------\\
  29. //    void bench_functions(BenchData * benches,dword * results,int count);
  30. //
  31. //    Called by main() to time a group of mode-specific benchmark functions
  32. //    and place the timing results into an array.
  33. //
  34. //        'benches' is the array of BenchData structures
  35. //        'results' is the array of benchmark timing results
  36. //        'count' is the number of elements in both 'benches' and 'results'
  37. //------------------------------------------------------------------------\\
  38.  
  39. void bench_functions(BenchData * benches,dword * results,int count)
  40. {
  41.     int i;
  42.  
  43.     for (i=0; i<count; i++)
  44.     {
  45.         timer1.timerOn();               // start timer
  46.         benches[i].do_bench();          // execute mode-specific function
  47.         results[i] = timer1.timerOff(); // stop timer, get elapsed time
  48.     }
  49. }
  50.  
  51. //------------------------------------------------------------------------\\
  52. //    void bench_functions(
  53. //        SharedBenchData * benches,dword * results,int count,enum vmode v);
  54. //
  55. //    Called by main() to time a group of benchmark functions and place
  56. //    the timing results into an array.
  57. //
  58. //        'benches' is the array of BenchData structures
  59. //        'results' is the two-dimensional array of benchmark timing results
  60. //        'count' is the number of elements in both 'benches' and 'results'
  61. //        'v' is the video mode, 0=mode 13h,1=tweaked mode
  62. //------------------------------------------------------------------------\\
  63.  
  64. void bench_functions(
  65.     SharedBenchData * benches,dword results[][2],int count,enum vmode v)
  66. {
  67.     int i;
  68.  
  69.     for (i=0; i<count; i++)
  70.     {
  71.         timer1.timerOn();                  // start timer
  72.         benches[i].do_bench(v);            // execute benchmark
  73.         results[i][v] = timer1.timerOff(); // stop timer, get elapsed time
  74.     }
  75. }
  76.  
  77. //------------------------------------------------------------------------\\
  78. //   int main()
  79. //------------------------------------------------------------------------\\
  80.  
  81. int main()
  82. {
  83.     int i;
  84.     cout <<
  85.         "\t\tVBENCH 1.0\n"
  86.         "Video benchmark program. Press any key to begin benchmarks\n";
  87.  
  88.     getch();
  89.  
  90.     fillbuf();       // fill buffer with non-planar random colors
  91.  
  92. //    Time the mode 13h benchmarks first
  93.  
  94.     set_gmode(0x13);      // set mode 13h
  95.     bench_functions(shared_benches,shared_results,shared_total,mode_13h);
  96.     bench_functions(m13_benches,m13_results,m13_total);
  97.  
  98. //    Time the Tweaked mode benchmarks next
  99.  
  100.     set_tweaked();        // set Tweaked mode
  101.     fillbuft();      // fill buffer with planar random colors
  102.     bench_functions(shared_benches,shared_results,shared_total,tweaked_mode);
  103.     bench_functions(tw_benches,tw_results,tw_total);
  104.  
  105. //    Finished benchmarks!
  106.  
  107.     set_gmode(3);         // set text mode
  108.  
  109. //   Display timing results
  110.     cout <<
  111.     "                     VBENCH 1.0\n"
  112.     "All benches were done moving 64,000 pixels of data to/from/between\n"
  113.     "screen, repeated 10 times. See vbench.txt for bench descriptions\n\n";
  114.  
  115.     cout <<
  116.     "               Benchmark results (microseconds):\n\n";
  117.  
  118.     cout <<
  119.     "           Benchmark          ||  Mode 13h || Tweaked Mode\n"
  120.     "------------------------------||-----------||--------------\n";
  121.  
  122.     cout.fill(' ');
  123.  
  124.     for (i=0; i <shared_total; i++)
  125.     {
  126.         cout.setf(ios::left,ios::adjustfield);
  127.         cout.width(30);
  128.         cout << shared_benches[i].desc();
  129.         cout << "||";
  130.         cout.setf(ios::right,ios::adjustfield);
  131.         cout.width(10);
  132.         cout << shared_results[i][0];
  133.         cout << " ||";
  134.         cout.width(10);
  135.         cout << shared_results[i][1];
  136.         cout << endl;
  137.     }
  138.  
  139.     cout << "\n"
  140.     "    Mode-specific benchmark results (microseconds):\n\n";
  141.  
  142.     cout <<
  143.     "      Mode 13h Benchmark      ||   Result\n"
  144.     "------------------------------||-----------\n";
  145.  
  146.     for (i=0; i<m13_total; i++)
  147.     {
  148.         cout.setf(ios::left,ios::adjustfield);
  149.         cout.width(30);
  150.         cout << m13_benches[i].desc();
  151.         cout << "||";
  152.         cout.setf(ios::right,ios::adjustfield);
  153.         cout.width(10);
  154.         cout << m13_results[i];
  155.         cout << endl;
  156.     }
  157.  
  158.     cout << "\n"
  159.     "    Tweaked Mode Benchmark    ||   Result\n"
  160.     "------------------------------||-----------\n";
  161.  
  162.     for (i=0; i<tw_total; i++)
  163.     {
  164.         cout.setf(ios::left,ios::adjustfield);
  165.         cout.width(30);
  166.         cout << tw_benches[i].desc();
  167.         cout << "||";
  168.         cout.setf(ios::right,ios::adjustfield);
  169.         cout.width(10);
  170.         cout << tw_results[i];
  171.         cout << endl;
  172.     }
  173.  
  174.     return 0;
  175. }
  176.